C প্রোগ্রামিং এ Exception Handling Techniques

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) Error Handling Functions (এরর হ্যান্ডলিং ফাংশনস) |
224
224

C প্রোগ্রামিং এ Exception Handling Techniques

সি প্রোগ্রামিং ভাষায় Exception Handling বা অসতর্ক অবস্থা হ্যান্ডলিং সরাসরি কোন বিল্ট-ইন ফিচারের মাধ্যমে সরবরাহ করা হয় না, যেমন অন্যান্য ভাষায় (যেমন C++, Java)। তবে, সি প্রোগ্রামিংয়ে এক্সসেপশন হ্যান্ডলিং হ্যান্ডল করার জন্য কিছু কৌশল এবং ট্রিক্স ব্যবহার করা হয়, যা ভুল বা অসতর্ক অবস্থা (runtime error) এ প্রতিক্রিয়া জানাতে সাহায্য করে।

সি ভাষায় সাধারণত error handling করা হয় বিভিন্ন return values, error codes, assertions, এবং setjmp()/longjmp() ফাংশন ব্যবহারের মাধ্যমে।


১. Return Values এবং Error Codes এর মাধ্যমে Error Handling

সি ভাষায় ফাংশনগুলো সাধারণত ইনপুট/আউটপুট, মেমোরি অ্যাক্সেস, ফাইল ওপেন ইত্যাদি অপারেশন সম্পাদনের সময় error codes রিটার্ন করে, যা থেকে প্রোগ্রামার বুঝতে পারেন যে কোনো সমস্যা ঘটেছে।

উদাহরণ: ফাইল ওপেনের সময় error handling

#include <stdio.h>

int main() {
    FILE *file = fopen("nonexistent_file.txt", "r");

    // চেক করা যে ফাইল ওপেন সফল হয়েছে কিনা
    if (file == NULL) {
        printf("Error opening file. Exiting program...\n");
        return 1;  // Error code রিটার্ন
    }

    // ফাইল কাজ সম্পন্ন করার পর বন্ধ করা
    fclose(file);
    return 0;
}

এখানে, fopen() যদি ফাইল ওপেন করতে ব্যর্থ হয় তবে এটি NULL রিটার্ন করবে, এবং প্রোগ্রাম একটি error message প্রদর্শন করবে এবং বের হয়ে যাবে।


২. assert() ব্যবহার করে Error Checking

assert() একটি ম্যাক্রো যা একটি শর্ত যাচাই করে এবং সেই শর্তটি যদি সত্য না হয় তবে প্রোগ্রামটি ক্র্যাশ হয়ে যায়। এটি সাধারণত ডিবাগিং এর সময় ব্যবহার করা হয়, কিন্তু runtime error হ্যান্ডলিংয়ের জন্য এটি কিছুটা সহায়ক হতে পারে।

উদাহরণ:

#include <stdio.h>
#include <assert.h>

int divide(int a, int b) {
    assert(b != 0);  // নিশ্চিত করা যে, b শূন্য নয়
    return a / b;
}

int main() {
    int result = divide(10, 0);  // ভুল ইনপুট দেওয়া হয়েছে
    printf("Result: %d\n", result);
    return 0;
}

এখানে, assert(b != 0) নিশ্চিত করবে যে b শূন্য নয়। যদি b == 0 হয়, তবে প্রোগ্রামটি চলাকালীন একটি ত্রুটি দেখাবে এবং প্রোগ্রামটি বন্ধ হবে।


৩. setjmp() এবং longjmp() ব্যবহার করে Error Handling

সি ভাষায় setjmp() এবং longjmp() ফাংশন দুটি ব্যবহার করে আপনি একটি ফাংশনের মধ্যে exception handling করতে পারেন। setjmp() ফাংশন একটি পয়েন্ট (checkpoint) সেট করে, এবং longjmp() ফাংশনটি সেই পয়েন্টে চলে আসে, এটি কার্যকরভাবে exception-handling এর মতো কাজ করে।

সিঙ্কট্যাক্স:

#include <setjmp.h>

jmp_buf env;  // Declare a buffer to store the environment

int main() {
    int val = setjmp(env);  // setjmp sets the environment and returns 0 initially

    if (val != 0) {
        // If we come here after calling longjmp, then it's an error condition
        printf("Error occurred: %d\n", val);
        return 1;
    } else {
        // Normal program flow
        // Simulating an error
        longjmp(env, 1);  // Simulate an error by jumping back to setjmp
    }

    return 0;
}

ব্যাখ্যা:

  • setjmp(env): এটি চেকপয়েন্ট তৈরি করে এবং 0 রিটার্ন করে।
  • longjmp(env, 1): এটি setjmp()-এ ফিরে যায় এবং 1 রিটার্ন করে, যা একটি ত্রুটি (exception) হিসাবে চিহ্নিত হয়।

এটি সি প্রোগ্রামে exception handling এ একটি কাজের মেকানিজম হতে পারে, তবে এটি কিছুটা ঝুঁকিপূর্ণ এবং সঠিকভাবে ব্যবহৃত না হলে প্রোগ্রামের স্টেট ম্যানেজমেন্টে সমস্যা তৈরি করতে পারে।


৪. Error Handling with errno

errno একটি গ্লোবাল ভেরিয়েবল যা সিস্টেম কল বা লাইব্রেরি ফাংশনগুলির সাথে সম্পর্কিত ত্রুটির কোড ধারণ করে। যখন কোনো সিস্টেম কল বা লাইব্রেরি ফাংশন ত্রুটি ঘটায়, তখন তা errno সেট করে, এবং প্রোগ্রামার সেই ত্রুটির ধরন চিহ্নিত করতে perror() বা strerror() ফাংশন ব্যবহার করতে পারেন।

উদাহরণ:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("nonexistent_file.txt", "r");

    if (file == NULL) {
        // `errno` এবং `perror()` এর মাধ্যমে ত্রুটি প্রদর্শন
        perror("Error opening file");
        printf("Error number: %d\n", errno);
        return 1;
    }

    fclose(file);
    return 0;
}

এখানে perror() ফাংশনটি errno ভেরিয়েবলের মানের মাধ্যমে একটি ত্রুটি বার্তা প্রদর্শন করে।


সারসংক্ষেপ:

পদ্ধতিবর্ণনা
return valuesফাংশনের মাধ্যমে error code রিটার্ন করে ত্রুটি শনাক্ত করা।
assert()নির্দিষ্ট শর্ত যাচাই করার জন্য ব্যবহৃত, ডিবাগিং এর সময়।
setjmp()/longjmp()এক্সেপশন হ্যান্ডলিংয়ের জন্য ব্যবহার করা হয়।
errnoসিস্টেম কল বা লাইব্রেরি ফাংশন দ্বারা রিটার্ন করা ত্রুটি কোড।

সি প্রোগ্রামিং ভাষায় Exception Handling সরাসরি সমর্থিত না হলেও, return values, setjmp()/longjmp(), errno এবং assert() এর মাধ্যমে ত্রুটি শনাক্তকরণ এবং হ্যান্ডলিং করা সম্ভব।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion